﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Controller;
using Interfaces;
using System.Drawing.Printing;

namespace Fejllog
{
    public partial class FrmStartUp : Form
    {
        PrintDocument udPrint;
        ClsSystemController systemController;
        static int sort = 0;
     
        public FrmStartUp()
        {
            InitializeComponent();
            systemController = new ClsSystemController();
            //obretter et nyt objekt til udprint
            udPrint = new PrintDocument();
        }

        public void OpdaterListView()
        {
            //henter alle fejl fra databasen
            systemController.HentAlleFejl();

            lvFejlLog.Columns[0].ListView.Sorting = SortOrder.Ascending;
            
            //for hver række der er i tabellen, bliver objektet tilføjet til listen
            foreach (IClsFejllog item in systemController.VisAlleFejl())
            {
                //tilføjer kun fejl ind der har en prioritet. behandlede fejl har ingen prioritet.
                if (item.FejlPrioritet != "")
                {
                    ListViewItem lvi = new ListViewItem();
                    lvi.SubItems[0].Text = item.FejlType;
                    lvi.SubItems.Add(item.FejlStacking);
                    lvi.SubItems.Add(item.FejlPrioritet);
                    lvi.SubItems.Add(item.FejlDato.ToShortDateString());
                    lvi.Tag = item.FejlID;
                    lvFejlLog.Items.Add(lvi);
                }
            }  
        }

        private void FrmStartUp_Load(object sender, EventArgs e)
        {
            //bruger metoden OpdaterListView her, så listen er hentet ved startup.
            OpdaterListView();
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void lvFejlLog_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            //når man dobbeltklikker på en fejl, vil man se et nyt vindue, hvor de specifikke detaljer er uddybet.
            DialogResult dlgResult = MessageBox.Show("Fejl ID:" + Environment.NewLine + lvFejlLog.FocusedItem.Tag + Environment.NewLine + Environment.NewLine + "Dato: " + Environment.NewLine +
                lvFejlLog.FocusedItem.SubItems[3].Text + Environment.NewLine + Environment.NewLine + "Prioritet: " + Environment.NewLine +
                lvFejlLog.FocusedItem.SubItems[2].Text + Environment.NewLine + Environment.NewLine + "Stack Trace: " + Environment.NewLine +
                lvFejlLog.FocusedItem.SubItems[1], "Fejl Info", MessageBoxButtons.OKCancel);

            //hvis man trykker OK, kan man behandle fejlen, 
            if (dlgResult == DialogResult.OK)
            {
                //vi tager nogle af informationerne med over, så disse data også er i den nye form.
                FrmFejlBehandling frmbehandling = new FrmFejlBehandling(systemController, lvFejlLog.FocusedItem.SubItems[0].Text, lvFejlLog.FocusedItem.SubItems[3].Text, (int)lvFejlLog.FocusedItem.Tag);
                frmbehandling.ShowDialog();
                lvFejlLog.Items.Clear();
                OpdaterListView();
                
            }
                //hvis man ikke vil gøre noget, hopper man bare ud af det nye vindue igen.
            else if (dlgResult == DialogResult.Cancel)
            {
               
            }
        }
        //forskellige funktioner ved klik af div. faner i Tooltip baren for oven af formen.
        private void closeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void printToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // Print koden er ikke færdig programmeret. En blank side vil blive printet lige pt.

            printDialog1.AllowSomePages = true;
            printDialog1.Document = udPrint;

            DialogResult result = printDialog1.ShowDialog();
            if (result == DialogResult.OK)
            {
                udPrint.Print();
            }
        }
        //link til Hjælp i MSDN
        private void guideToolStripMenuItem_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start("http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28MSDNSTART%29&rd=true");
        }
        //link til forum
        private void mSDNForumsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start("http://social.msdn.microsoft.com/Forums/en-US/category/visualstudio,vsarch,vsdbg,vstest,vstfs,vsdata,vsappdev,visualbasic,visualcsharp,visualc");
        }
        //går over til statestik formen, fra startformen
        private void btnStatistik_Click(object sender, EventArgs e)
        {
            FrmStatistik frmstatistik = new FrmStatistik(systemController);
            frmstatistik.ShowDialog(); 

        }

        //metode til når man trykker på kolonnen i toppen af ListViewet, så sorterer den type, efter alfabetisk orden.
        private void lvFejlLog_ColumnClick(object sender, ColumnClickEventArgs e)
        {
            if (sort == 0)
            {
                lvFejlLog.Columns[0].ListView.Sorting = SortOrder.Descending;
                sort = 1;
            }

            else if (sort == 1)
            {
                lvFejlLog.Columns[0].ListView.Sorting = SortOrder.Ascending;
                sort = 0;
            }
            
        }
        //Opdaterer listen, hvis der er kommet flere fejl, mens programmet kører
        private void btnOpdater_Click(object sender, EventArgs e)
        {
            lvFejlLog.Items.Clear();
            OpdaterListView();
        }
        //går over til 'behandlede fejl' formen
        private void btnBehandlede_Click(object sender, EventArgs e)
        {
            FrmBehandledeFejl frmBehandlede = new FrmBehandledeFejl(systemController);
            frmBehandlede.ShowDialog();
        }
        //går over til 'Patch notes' formen
        private void btnPatchNotes_Click(object sender, EventArgs e)
        {
            FrmSePatchNotes frmpatch = new FrmSePatchNotes(systemController);
            frmpatch.ShowDialog();
        }

        private void toolTip1_Popup(object sender, PopupEventArgs e)
        {

        }
    }
}
